package com.demo.crm.springboot3security.service;

import com.demo.crm.springboot3security.dto.ModuleConfig;
import com.demo.crm.springboot3security.entity.Module;
import com.mybatisflex.core.paginate.Page;

import java.util.List;

/**
 * 模块服务接口
 */
public interface ModuleService {
    /**
     * 创建新模块
     *
     * @param config 模块配置
     * @return 创建的模块
     */
    Module createModule(ModuleConfig config);

    /**
     * 更新模块
     *
     * @param moduleId 模块ID
     * @param config   模块配置
     * @return 更新后的模块
     */
    Module updateModule(Long moduleId, ModuleConfig config);

    /**
     * 删除模块
     *
     * @param moduleId 模块ID
     */
    void deleteModule(Long moduleId);

    /**
     * 获取模块详情
     *
     * @param moduleId 模块ID
     * @return 模块详情
     */
    Module getModule(Long moduleId);

    /**
     * 获取模块列表
     *
     * @param pageable 分页参数
     * @return 模块列表
     */
    Page<Module> listModules(int page, int size);

    /**
     * 获取模块树结构
     *
     * @return 模块树
     */
    List<Module> getModuleTree();

    /**
     * 启用/禁用模块
     *
     * @param moduleId 模块ID
     * @param enabled  是否启用
     * @return 更新后的模块
     */
    Module toggleModule(Long moduleId, boolean enabled);
}